home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac-Source 1994 July
/
Mac-Source_July_1994.iso
/
Updates, etc.
/
PG PRO⁄PG Lite Demos
/
PG PRO Demo
/
PG PRO Demo.rsrc
/
FLTR_1003_DOID
< prev
next >
Wrap
Text File
|
1993-09-10
|
6KB
|
237 lines
'===============================================================================
'= Copyright 1992 Staz™ Software, Inc. =
'= All rights reserved =
'= "DOID.FLTR" from PG:PRO =
'===============================================================================
INCLUDE FILE _aplIncl
COMPILE 0,_MacsbugLabels_strResource_caseInsensitive'set by PG:PRO
GLOBALS "PG PRO.GLBL"'standard
END GLOBALS'end of global DIMs
INCLUDE "@Header.INCL"
_fixBkgdDocHilite = 2001
GOTO"DOID Filter"'ALWAYS branch around FNs
'
'===============================================================================
LOCAL FN doidWndEvent(theWnd,theEvent)
'=============================================================================
WINDOW OUTPUT theWnd
gActWindow = theWnd
gOutWindow = theWnd
gWhichWindow = theWnd
gWhichClass = WINDOW(_outputWClass)
gAction = _windowAction
gSubAction = theEvent
GLOBALS GOSUB "End of DOID"
END FN
'===============================================================================
LOCAL FN drawWindoid
'=============================================================================
DIM thePat;8,t;8
LONG IF gObjUserTp& = _"DOID"
CALL GETPENSTATE(pn$)
` MOVE.L #$00550055,D0
` LEA ^thePat,A0
` MOVE.L D0,(A0)+
` MOVE.L D0,(A0)
` PEA ^thePat
` _penPat
CALL PAINTRECT(gObjT)
CALL PENNORMAL
LONG IF gObjUser1 AND 2'it's on side
CALL MOVETO(gObjR,gObjT)
CALL LINETO(gObjR,gObjB)
CALL SETRECT(t,1,3,8,10)
XELSE
CALL MOVETO(gObjL,gObjB)
CALL LINETO(gObjR,gObjB)
CALL SETRECT(t,3,1,10,8)
END IF
LONG IF gObjUser1 AND 1'Has close box
CALL FRAMERECT(t)
CALL INSETRECT(t,1,1)
CALL ERASERECT(t)
END IF
CALL SETPENSTATE(pn$)
END IF
END FN
'===============================================================================
LOCAL FN dragWindoid
'=============================================================================
DIM t;8,my;4
LONG IF gObjUserTp& = _"DOID"
closed = _false
LONG IF (gObjUser1 AND 1)'Has close box
LONG IF (gObjUser1 AND 2)'it's on side
CALL SETRECT(t,1,3,8,10)
XELSE'across top
CALL SETRECT(t,3,1,10,8)
END IF
my;4 = @gWhereY
CALL GLOBALTOLOCAL(my)
LONG IF FN PTINRECT(my,t)'click was in close box?
wasInClose = _false
isInClose = _false
WHILE FN STILLDOWN
CALL GETMOUSE(my)
isInClose = FN PTINRECT(my,t)
LONG IF wasInClose <> isInClose
wasInClose = isInClose
CALL INVERTRECT(t)
END IF
WEND
LONG IF isInClose
FN doidWndEvent(WINDOW(_activewnd),_windowClose)
LONG IF gAction
FN pGclose(gActWindow)
closed = _zTrue
gAction = 0
END IF
END IF
END IF
END IF
LONG IF closed = _false
CALL SETRECT(t,-9999,-9999,9999,9999)
CALL DRAGWINDOW(WINDOW(_wndpointer),gWhereY,t)
END IF
END IF
END FN
'===============================================================================
LOCAL FN getWndRef(wPtr&)
'=============================================================================
wndNum = PEEK(wPtr&+_wRefCon + 1) AND 63
IF [WNDBLK + wndNum * 16] <> wPtr& THEN wndNum = 0
END FN = wndNum
'===============================================================================
LOCAL FN wndIsBkGrndDoc(wPtr&)
'=============================================================================
result = _false
LONG IF FN GETWREFCON(wPtr&) AND _keepInBack
result = FN getWndRef(wPtr&)
END IF
END FN = result
'===============================================================================
LOCAL FN hiliteBkGrndDoc
'=============================================================================
wPtr& = FN FRONTWINDOW
frontDoc = 0
LONG IF wPtr&
LONG IF gInBackground OR SYSTEM(_aplActive)=0
gotDocWnd = _zTrue
XELSE
gotDocWnd = _false
END IF
frontDoc = 0
DO
LONG IF FN wndIsBkGrndDoc(wPtr&)
LONG IF gotDocWnd
CALL HILITEWINDOW(wPtr&,_false)
XELSE
CALL HILITEWINDOW(wPtr&,_zTrue)
gotDocWnd = _zTrue
frontDoc = FN getWndRef(wPtr&)
END IF
END IF
wPtr& = [wPtr&+_nextWindow]
UNTIL wPtr& = 0
END IF
END FN = frontDoc
'===============================================================================
LOCAL FN findNCloseDoc
'=============================================================================
frontDoc = FN hiliteBkGrndDoc
LONG IF frontDoc
FN doidWndEvent(frontDoc,_windowClose)
LONG IF gAction
FN pGclose(gActWindow)
gAction = 0
frontDoc = FN hiliteBkGrndDoc
IF frontDoc THEN WINDOW frontDoc
END IF
END IF
END FN
'===============================================================================
LOCAL FN clickBkGrndDoc
'=============================================================================
GET WINDOW gWhichWindow,wPtr&
LONG IF FN wndIsBkGrndDoc(wPtr&)
WINDOW gWhichWindow
FN doidWndEvent(gWhichWindow,_windowClicked)
FN hiliteBkGrndDoc
gAction = 0
END IF
END FN
'===============================================================================
LOCAL FN closeBkGrndDoc
'=============================================================================
LONG IF gKissOfDeath = _false
GET WINDOW gWhichWindow,wPtr&
LONG IF FN wndIsBkGrndDoc(wPtr&)
GLOBALS GOSUB "End of DOID"
LONG IF gAction
DIALOG = _fixBkgdDocHilite
END IF
END IF
END IF
END FN
'===============================================================================
LOCAL FN fixWindowOrder
'=============================================================================
DIM doid(64)
doidCnt = 0
wPtr& = FN FRONTWINDOW
WHILE wPtr&
LONG IF FN wndIsBkGrndDoc(wPtr&) = _false
theWindow = FN getWndRef(wPtr&)
LONG IF theWindow
INC(doidCnt)
doid(doidCnt) = theWindow
END IF
END IF
wPtr& = [wPtr&+_nextWindow]
WEND
WHILE doidCnt
WINDOW doid(doidCnt)
DEC(doidCnt)
WEND
END FN
'===============================================================================
"DOID Filter"
SELECT gAction
CASE _otherAction
SELECT gSubAction
CASE _otherSwitch :FN hiliteBkGrndDoc
CASE _otherUserUpdate:FN drawWindoid
CASE _otherUserClick :FN dragWindoid
CASE _otherUser
LONG IF gDialogValue = _fixBkgdDocHilite
FN hiliteBkGrndDoc
END IF
END SELECT
CASE _windowAction
SELECT gSubAction
CASE _windowClicked
LONG IF SYSTEM(_aplActive)=0
FN fixWindowOrder
XELSE
FN clickBkGrndDoc
END IF
CASE _windowDocWillMove
WINDOW gWhichWindow
FN fixWindowOrder
FN hiliteBkGrndDoc
CASE _windowClose
FN closeBkGrndDoc
CASE _windowSized
FN fixWindowOrder
END SELECT
CASE _menuAction
LONG IF _closeItemSkipsDoids
LONG IF gItemName$ = STR#(_baseID - 2,5)
FN findNCloseDoc
END IF
END IF
END SELECT
"End of DOID"
'===============================================================================